package com.iocollege.tinyframe.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iocollege.tinyframe.common.core.domain.QueryPagePara;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

@Service
public interface MyService<T> extends IService<T> {

    /**
     * 按属性查找,快速查找方式
     *
     * @param AttName
     * @param value
     * @return
     */
    List<T> findByAttrName(String AttName, Object value);


    /**
     * 读取指定属性值的几条数据
     *
     * @param AttName
     * @param value
     * @param n        几第数据
     * @param orderCol 排序字段，只支持一个
     * @param asc      是否升序
     * @return
     */
    IPage<T> findByAttrNameTopN(String AttName, Object value, Integer n, String orderCol, Boolean asc);


    /**
     * 按属性查询，只返回一个
     *
     * @param AttName
     * @param value
     * @return
     */
    T findOndeByAttrName(String AttName, Object value);


    /**
     * 按属性查找,返回数据
     *
     * @param AttName
     * @param value
     * @return
     */
    public Integer countByAttrName(String AttName, Object value);


    IPage<T> getByPage(QueryPagePara request);

    Map<String, Object> getByPage(QueryPagePara request, T entity);

    Map<String, Object> selectByPageNumSize(QueryPagePara request, Supplier<?> s);


    int removeByIds(Long[] ids);

}